/**
 * 从JSON对象中提取所有的code值，只取前九位
 * @param jsonData JSON对象
 * @returns 所有code值(前九位)组成的数组
 */
export function extractCodesFromObject(jsonData: any): string[] {
  // 存储所有code值的数组
  const codes: string[] = []

  // 递归函数，用于遍历JSON对象中的所有属性
  const extractCodeValues = (obj: any) => {
    if (!obj || typeof obj !== 'object') return

    // 如果对象有code属性，添加到结果数组（只取前九位）
    if (obj.hasOwnProperty('code') && typeof obj.code === 'string') {
      // 只取code的前九位
      const codePrefix = obj.code.substring(0, 9)
      // 保留重复值，直接添加
      codes.push(codePrefix)
    }

    // 遍历对象的所有属性
    for (const key in obj) {
      if (obj.hasOwnProperty(key)) {
        const value = obj[key]

        // 如果属性值是数组
        if (Array.isArray(value)) {
          value.forEach((item) => extractCodeValues(item))
        }
        // 如果属性值是对象
        else if (typeof value === 'object' && value !== null) {
          extractCodeValues(value)
        }
      }
    }
  }

  // 开始递归遍历
  extractCodeValues(jsonData)

  return codes
}

/**
 * 提取JSON文件或对象中所有的code值，组成一个新的数组
 * 在浏览器环境中，只支持处理对象
 * @param jsonData JSON对象
 * @returns 所有code值(前九位)组成的数组
 */
export function extractCodes(jsonData: any): string[] {
  try {
    return extractCodesFromObject(jsonData)
  } catch (error) {
    console.error('提取code值时出错:', error)
    return []
  }
}

/**
 * 提取JSON对象中所有的code值，并以逗号分隔的字符串形式返回
 * @param jsonData JSON对象
 * @returns 所有code值(前九位)组成的字符串，用逗号分隔
 */
export function extractCodesAsString(jsonData: any): string {
  const codes = extractCodes(jsonData)
  return codes.join(',')
}
